package gui;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JLabel;
import javax.swing.JPanel;

import utility.Time;
import business.AnneeEtudeBL;
import business.PeriodeBL;
import business.SeanceBL;

public class SemaineServiceUI extends JPanel {
	
	private int idService;
	
	public SemaineServiceUI(Date debutSemaine, int matin, int aprem, int idAnneeEtude, int idServ) {

//		methode pour recuperer toutes les semaines avec semaine actuelle
		int nbJours = 5;
		int nbPeriodes = matin + aprem;
		idService = idServ;
		
		String[] jours = new String[nbJours];
		
		Calendar c = Calendar.getInstance();
		c.set(debutSemaine.getYear(), debutSemaine.getMonth(), debutSemaine.getDate());
		
		for (int i=0; i<nbJours; i++) {
			jours[i] = c.get(Calendar.DATE) + "/" + (c.get(Calendar.MONTH) + 1);
			c.add(Calendar.DATE, 1);
		}
		
		setLayout(new BorderLayout());

		JPanel entete = new JPanel();
		add(entete, BorderLayout.PAGE_START);
		GridLayout enteteLayout = new GridLayout(1, 6);
		enteteLayout.setHgap(10);
		entete.setLayout(enteteLayout);

		entete.add(new JLabel());
		entete.add(new IntituleJourUI("Lundi " + jours[0]));
		entete.add(new IntituleJourUI("Mardi " + jours[1]));
		entete.add(new IntituleJourUI("Mercredi " + jours[2]));
		entete.add(new IntituleJourUI("Jeudi " + jours[3]));
		entete.add(new IntituleJourUI("Vendredi " + jours[4]));

		JPanel contenu = new JPanel();
		add(contenu, BorderLayout.CENTER);
		GridLayout contenuLayout = new GridLayout(matin + aprem, 6);
		contenuLayout.setHgap(10);
		contenu.setLayout(contenuLayout);

		AnneeEtudeBL aeBL = new AnneeEtudeBL(idAnneeEtude);
		PeriodeBL periodeBL = new PeriodeBL();
		
		String[] intitules = {"8h00 - 9h30", "9h45 - 11h15", "11h30 - 13h00", "14h00 - 15h30", "15h45 - 17h15", "17h30 - 19h00"};
		
		for (int periodeCourante = 0; periodeCourante < nbPeriodes; periodeCourante++) {
			contenu.add(new IntitulePeriodeUI(intitules[periodeCourante]));
			/* Reinitialiser le calendrier au debut de la semaine */
			c.set(debutSemaine.getYear(), debutSemaine.getMonth(), debutSemaine.getDate());
			for (int jourCourant = 0; jourCourant < nbJours; jourCourant++) {
				String dateString = Time.dateToString(
						new Date(
							c.get(Calendar.YEAR),
							c.get(Calendar.MONTH),
							c.get(Calendar.DATE)
							)
						);
				
				int idPeriode = periodeBL.getIdPeriode(dateString, periodeCourante);
				PeriodeServiceUI periode = new PeriodeServiceUI(idService, idPeriode);
				
				ArrayList<SeanceBL> seanceList = aeBL.getListeSeances(idPeriode);
				for (SeanceBL seanceBL : seanceList) {
					periode.add(new SeanceServiceUI(seanceBL.getId(), seanceBL.getCouleur(), seanceBL.getNom(), "TD", seanceBL.getNomProf(), aeBL.getNomAnneeEtude(), seanceBL.getNomGroupe(), seanceBL.getNomSalle()));
				}
				
				contenu.add(periode);
				
				c.add(Calendar.DATE, 1);
			}
		}

	}

	public String toString() {
		return "22/02 - 26/02";
	}
}
